package com.tuling.code.io.bio;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 同步阻塞I/O通信模型
 * 
 * @author javaw
 *
 */
public class TimeServer {
	public static void main(String[] args) {
		int port = 8080;
		if (args != null && args.length > 0) {
			port = Integer.valueOf(args[0]);
		}
		
		ServerSocket server = null;
		try {
			server = new ServerSocket(port);
			System.out.println("Tht time server is start in port : "+port);
			Socket socket = null;
			while (true) {
				socket = server.accept(); //阻塞。等待客户端连接
				//如果这里不使用线程执行，那么就只能处理一个客户端。只有当一个客户端断开连接之后，才可以处理新的客户端
				//这里每次accept之后，就开一个线程处理对应的客户端，即有多少克客户端链接过来，服务端就会开启都少个线程
				//这个会耗尽服务器的资源。cpu切换线程开销，jvm也会爆线程栈溢出错误。耗尽内存
				new Thread(new TimeServerHandler(socket)).start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(server != null){
				System.out.println("The time server close");
				try {
					server.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				server = null;
			}
		}
	}
}
